Immutable Rails Cache Header, Local Assigns in Strict Local Templates, Threaded Active Storage Mirror Service | This Week in Rails
ActionPackに関する変更です
Cache-Control ヘッダーの immutable ディレクティブがサポートされました
immutable ディレクティブは、特定のリソースが将来変更されないことをブラウザに伝えるために使用されます
これにより、そのリソースが一度キャッシュされたあと再検証やダウンロードが不要になるため、パフォーマンスが向上します
適切に活用していきたいですね
ActionViewに関する変更です
Viewテンプレートへの変数の受け渡しに関する話です
前提知識として locals に関して話します
よくある例を示します(↑を参考にしました)
code:new.html.erb
<h1>New book</h1>
<%= render partial: "form", locals: {book: @book} %>
code:form.html.erb
<%= form_with model: book do |form| %>
<p>
<b>Title</b><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
code:before.html.erb
<%# issues/_card.html.erb %>
<% title = local_assigns:title || "Default title" %> <h2><%= title %></h2>
<span class="comment-count"><%= comment_count %></span>
code:after.html.erb
<%# issues/_card.html.erb %>
<%# locals: (title: "Default title", comment_count: 0) %>
<h2><%= title %></h2>
<span class="comment-count"><%= comment_count %></span>
今回のプルリクエストに関するドキュメントの更新が別プルリクエストで出されていました
To access a local variable with a default value that is named the same as a reserved Ruby keyword, like class or if, the values can be accessed through binding.local_variable_get:
code:html
<%# locals: (class: "message") %>
<div class="<%= binding.local_variable_get(:class) %>">...</div>
Rubyの予約語と同じ名前のローカル変数を参照したい場合、
これまでは local_assigns をつかって参照していた
しかし local_assigns では locals で指定したデフォルト値は無視されるので困っていた
今回のプルリクエストで binding.local_variable_get を使えるようになった
これにより、デフォルト値を考慮したうえで参照できるようになった
とのことです
ActiveStorageに関する変更です
複数のストレージサービスに対して同時にファイルを保存できるようにするためのサービスです
ファイルの冗長性を確保したり、異なるストレージサービスを併用したい場合に役立ちます
ミラーサービスは、production環境でサービス間の移行期で一時的に利用するための機能です。新しいサービスへのミラーリングを開始し、既存のファイルを古いサービスから新しいサービスにコピーしてから、新しいサービスに全面的に移行できます。
ストレージサービスを移行する際に利用することを想定された機能のようですね
このプルリクエストでは、スレッドプールを使用してMirrorServiceの処理を並列化することでパフォーマンスの向上を行なっています